home *** CD-ROM | disk | FTP | other *** search
-
- if (PRIOR & 0xc0)
- {
- UBYTE *t_scrn_ptr1; /* Input Pointer */
- UBYTE *t_scrn_ptr2; /* Output Pointer */
- int xpos;
- int nibble;
-
- t_scrn_ptr1 = scrn_ptr;
- t_scrn_ptr2 = scrn_ptr;
-
- for (xpos=0;xpos<ATARI_WIDTH;xpos++)
- {
- UBYTE pf_pixel;
- UBYTE colour;
-
- pf_pixel = *t_scrn_ptr1++;
- #ifdef DIRECT_VIDEO
- pf_pixel = colour_to_pf[pf_pixel];
- #endif
-
- if ((xpos & 0x03) == 0x00)
- nibble = 0;
-
- nibble <<= 1;
-
- if (pf_pixel == PF_COLPF1)
- nibble += 1;
-
- if ((xpos & 0x03) == 0x03)
- {
- switch (PRIOR & 0xc0)
- {
- case 0x40 :
- colour = colour_translation_table[(COLBK & 0xf0) | nibble];
- break;
- case 0x80 :
- colour = colour_lookup[GTIA_XLate[nibble]];
- break;
- case 0xc0 :
- if (nibble)
- colour = colour_translation_table[(nibble << 4) | (COLBK & 0x0f)];
- else
- colour = colour_translation_table[(nibble << 4)];
-
- break;
- }
-
- *t_scrn_ptr2++ = colour;
- *t_scrn_ptr2++ = colour;
- *t_scrn_ptr2++ = colour;
- *t_scrn_ptr2++ = colour;
- }
- }
-
- scrn_ptr = t_scrn_ptr2;
- }
- #ifndef DIRECT_VIDEO
- else
- {
- UBYTE *t_scrn_ptr;
- int xpos;
-
- t_scrn_ptr = scrn_ptr;
-
- for (xpos=0;xpos<ATARI_WIDTH;xpos++)
- {
- UBYTE colreg;
- UBYTE colour;
-
- colreg = *t_scrn_ptr;
- if (colreg==5 && colpf1_fiddled)
- colour = (colour_lookup[5] & 0x0f) | (colour_lookup[6] & 0xf0);
- else
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
-
- /*
- colreg = *t_scrn_ptr;
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
-
- colreg = *t_scrn_ptr;
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
-
- colreg = *t_scrn_ptr;
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
-
- colreg = *t_scrn_ptr;
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
-
- colreg = *t_scrn_ptr;
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
-
- colreg = *t_scrn_ptr;
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
-
- colreg = *t_scrn_ptr;
- colour = colour_lookup[colreg];
- *t_scrn_ptr++ = colour;
- */
- }
-
- scrn_ptr = t_scrn_ptr;
- }
- #else
- else
- {
- scrn_ptr += ATARI_WIDTH;
- }
- #endif
-
-
- /* player = player # to display or 0xff for none
- missile = missle # to display or 0xff for none
- pixel = screen register to display at this position
- */
- UBYTE WhichColourReg (int pf_pixel, int player, int missile)
- {
- UBYTE colreg;
-
- if (colpf1_fiddled && pf_pixel==5 && ((PRIOR & 0xC0)==0))
- return pf_pixel;
- /* That's actually not quite correct, we should display the hue of the
- colPF1 with the colour of the player, but so what... */
-
- switch (PRIOR & 0x1f)
- {
- case 0x01 : /* RIVER RAID */
- if (missile < player)
- colreg = missile;
- else
- colreg = player;
- break;
- case 0x02 : /* MOUNTAIN KING */
- if (player < 2)
- {
- colreg = player;
- }
- else if (pf_pixel < 7)
- {
- colreg = pf_pixel;
- }
- else if (pf_pixel == 7)
- {
- if (missile != 0xff)
- colreg = missile;
- else
- colreg = pf_pixel;
- }
- else if (player < 4)
- {
- colreg = player;
- }
- else
- {
- colreg = pf_pixel;
- }
- break;
- case 0x00 : /* That's also not quite correct. We should display here
- a mixture of the player color and the playfield */
- case 0x04 :
- if (pf_pixel > 7)
- {
- if (missile < player)
- colreg = missile;
- else
- colreg = player;
- }
- else
- {
- colreg = pf_pixel;
- }
- break;
- case 0x08 : /* RALLY SPEEDWAY */
- if (pf_pixel > 5)
- {
- if (missile < player)
- colreg = missile;
- else
- colreg = player;
- }
- else
- {
- colreg = pf_pixel;
- }
- break;
- case 0x11 : /* PAC-MAN, STAR RAIDERS, ASTEROIDS, FROGGER DELUXE, KANGAROO */
- if (player != 0xff)
- colreg = player;
- else {
- if (missile != 0xff)
- colreg = 7;
- else
- colreg = pf_pixel;
- }
- break;
- case 0x12 : /* ZONE RANGER */
- if (player < 2)
- {
- colreg = player;
- }
- else if (pf_pixel < 7)
- {
- colreg = pf_pixel;
- }
- else if (pf_pixel == 7)
- {
- if (missile != 0xff)
- colreg = missile;
- else
- colreg = pf_pixel;
- }
- else if (player < 4)
- {
- colreg = player;
- }
- else
- {
- colreg = pf_pixel;
- }
- break;
- case 0x10 : /* That's also not quite correct. We should display here
- a mixture of the player color and the playfield */
- case 0x14 : /* ATARI CHESS, FORT APOCALYPSE */
- if (missile != 0xff)
- {
- colreg = 7;/* Missles are COLPF3 now and have hence priority */
- /*
- if (pf_pixel > 7)
- colreg = 7; Missile using COLPF3
- else
- colreg = pf_pixel;
- */
- }
- else
- {
- if (pf_pixel > 7)
- colreg = player;
- else
- colreg = pf_pixel;
- }
- break;
- case 0x18 : /* THE LAST STARTFIGHTER */
- if (pf_pixel > 5)
- {
- if (missile < player)
- colreg = 7; /* Missile using COLPF3 */
- else
- colreg = player;
- }
- else
- {
- colreg = pf_pixel;
- }
- break;
- default :
- printf ("Unsupported PRIOR = %02x\n", PRIOR);
- }
-
- return colreg;
- }
-
- static int which_pm_lookup[16] =
- {
- 0xff, /* 0000 - None */
- 0x00, /* 0001 - Player 0 */
- 0x01, /* 0010 - Player 1 */
- 0x00, /* 0011 - Player 0 */
- 0x02, /* 0100 - Player 2 */
- 0x00, /* 0101 - Player 0 */
- 0x01, /* 0110 - Player 1 */
- 0x00, /* 0111 - Player 0 */
- 0x03, /* 1000 - Player 3 */
- 0x00, /* 1001 - Player 0 */
- 0x01, /* 1010 - Player 1 */
- 0x00, /* 1011 - Player 0 */
- 0x02, /* 1100 - Player 2 */
- 0x00, /* 1101 - Player 0 */
- 0x01, /* 1110 - Player 1 */
- 0x00 /* 1111 - Player 0 */
- };
-